[アップデート]AWS DataSyncは、新機能のタスクレポートで、タスク実行ごとのデータ転送の詳細なレポートが提供されるようになりました
はじめに
AWS DataSyncは、タスクレポートというデータ転送の詳細レポートを提供するようになりました。
タスクレポートは、転送の成否や、スキップ、転送、検証、および削除された全てのファイルとフォルダについての詳細なレポートをS3バケットにJSON形式で保存します。
これにより、データ転送の監査、ファイルの保管過程の追跡、そして転送エラーのトラブルシューティングが容易になります。
さらに、AWS Glue、Amazon Athena、Amazon QuickSightのAWSサービスと組み合わせて、これらのレポートデータを自動的に処理、分析、可視化することにより、データ管理の効率化が図れます。
事前準備
今回は検証として、同一リージョン内のS3バケットからS3バケットへファイル転送するようDataSyncタスクを作成します。
- 送信元と送信先のS3バケットを作成
- 送信元S3バケット名:
cm-datasync-source
- ファイル名:
test.jpg
が保存されている
- ファイル名:
- 送信元S3バケット名:
cm-datasync-destination
- ファイル名:
testのコピー.jpg
が保存されている
- ファイル名:
- 送信元S3バケット名:
IAMロール作成
DataSyncがS3バケットにアクセスするための IAMロールを作成します。
IAMロールから信頼されたエンティティでDataSync - S3 Location
を選択します。
ポリシーAmazonS3FullAccess
が自動で選択されますので、ロール名をS3AccessForDataSync
として作成します。
ポリシーAmazonS3FullAccess
よりも制限の厳しいポリシーを作成する場合、下記のドキュメントに設定ポリシーが記載されていますので、ご確認下さい。
DataSyncのタスクを作成
DataSyncのタスクの各設定内容は、下記のブログで分かりやすく説明されていますので、ご参考ください。
DataSyncのタスクを作成しましょう。
送信元のロケーションは、S3バケット名cm-datasync-source
を選択し、先程作成したS3AccessForDataSync
というIAMロールを選択します。
送信先のロケーションは、S3バケット名cm-datasync-destination
を選択し、先程作成したS3AccessForDataSync
というIAMロールを選択します。
設定では、タスクの実行時に、送信元には存在しないが送信先のバケットには存在するファイル(testのコピー.jpg
)を削除したいため、削除されたファイルを保持する
のチェックを外しました。
理由としては、後述するタスクレポート機能のうち削除
のレポートを確認したいためです。
他、下記の画像箇所の項目はデフォルトです。
レポートの設定内容は、後で詳細に解説しますが、下記の通りです。
- レポートタイプ
- 標準レポート
- レポートレベル
- 成功と失敗
- レポートを出力するバケット
cm-datasync-destination
- IAMロール
S3AccessForDataSync
CloudWatch Logsのログレベルは、転送されたすべてのオブジェクトとファイルをログに記録する
にしています。
これでタスクを作成後、タスクを開始します。
S3バケットのファイル転送が完了すると、タスクが完了します。
タスクレポートを解説
タスクレポートについて解説します。
タスクレポートには、レポートタイプとレポートレベルの2つの選択項目がありますので、それぞれ分けて説明します。
レポートタイプ
レポートタイプには、概要レポート(Summary only)と標準レポート(Standart report)の2種類があります。
概要レポート(Summary only)
概要レポートの内容について、実際のレポートを見ながら説明します。
概要レポートの保存先のS3URIは、s3://cm-datasync-destination/reports-prefix/Summary-Reports/task-ID/exec-ID/
です。
概要レポートのファイルであるexec-ID.summary-v1.json
ファイルの中身は、下記の内容でした。
概要レポートのサンプル (クリックすると展開します)
{ "AccountId": "アカウントID", "TaskExecutionId": "exec-02b42227e495df344", "SourceLocation": { "LocationType": "Amazon S3", "LocationId": "loc-04d7f473f4ed53aad", "CreationTime": "2023-09-03T11:38:34.008000000Z" }, "DestinationLocation": { "LocationType": "Amazon S3", "LocationId": "loc-042325857c82bd933", "CreationTime": "2023-09-03T11:38:34.233000000Z" }, "StartTime": "2023-09-03T11:53:58.459000000Z", "EndTime": "2023-09-03T11:54:04.439000000Z", "TotalTime": 5980, "OverallStatus": "SUCCESS", "Result": { "FilesTransferred": 1, "FilesDeleted": 1, "FilesVerified": 2, "FilesSkipped": 1, "BytesWritten": 9244, "BytesTransferred": 9244, "BytesCompressed": 5743, "PrepareDuration": 1544, "PrepareStatus": "SUCCESS", "TransferDuration": 3810, "TransferStatus": "SUCCESS", "VerifyDuration": 277, "VerifyStatus": "SUCCESS" }, "Options": { "VerifyMode": "ONLY_FILES_TRANSFERRED", "OverwriteMode": "ALWAYS", "Atime": "BEST_EFFORT", "Mtime": "PRESERVE", "Uid": "NONE", "Gid": "NONE", "PreserveDeletedFiles": "REMOVE", "PreserveDevices": "NONE", "PosixPermissions": "NONE", "BytesPerSecond": -1, "TaskQueueing": "ENABLED", "LogLevel": "TRANSFER", "TransferMode": "CHANGED", "SecurityDescriptorCopyFlags": "NONE", "ObjectTags": "PRESERVE" }, "Filters": { "Includes": [], "Excludes": [] } }
概要レポートは、転送に関する下記の内容等が出力されます。
- タスク実行を実行したAWSアカウント
AccountId
キーが該当します
- 送信元と送信先の場所
SourceLocation
とDestinationLocation
キーが該当します
- タスクの実行が完了したか、キャンセルされたか、エラーが発生したか
OverallStatus
キーが該当します
- スキップ、転送、検証、削除されたファイルの合計数
Result
の下記のキーが該当します- FilesTransferred:転送されたファイル数
- FilesDeleted:削除されたファイル数
- FilesVerified:(DataSyncが転送中に整合性を)検証したファイル数
- FilesSkipped:スキップされたファイル数
- 転送された合計バイト数
Result
のBytesTransferred
キーが該当します
- 開始時間と終了時間(転送の合計時間を含む)
StartTime
、EndTime
、TotalTime
キーが該当します
- タスク設定 (帯域幅制限、データ検証、フィルターなど)
Options
キー配下が該当します
標準レポート(Standart report)
標準レポートには、概要レポートに加えて下記の4つのレポートが出力されます。
- 転送(Transferred)
- DataSyncが転送しようとしたファイル、オブジェクト、ディレクトリ
- ファイル名:
exec-ID.files-transferred-v1-ID.json
- スキップ(Skipped)
- DataSyncが転送中にスキップされたファイル、オブジェクト、ディレクトリ
- ファイル名:
exec-ID.files-skipped-v1-ID.json
- 検証(Verified)
- DataSyncが転送中に整合性を確認しようとしたファイル、オブジェクト、ディレクトリ
- ファイル名:
exec-ID.files-verified-v1-ID.json
- 削除(Deleted)
- DataSyncが送信元には存在しないが送信先のバケットには存在するファイルを削除するようタスクを構成した場合に、削除されたファイル、ディレクトリ、オブジェクト
- ファイル名:
exec-ID.files-deleted-v1-ID.json
4つのレポートについても、実際のレポートを見ながら説明します。
標準レポートの保存先のS3URIは、s3://cm-datasync-destination/reports-prefix/Detailed-Reports/task-ID/exec-ID/
です。
転送(Transferred)
標準の転送のレポートのファイルであるexec-ID.files-transferred-v1-ID.json
の中身は、下記の内容でした。
標準の転送のレポートサンプル (クリックすると展開します)
{ "TaskExecutionId": "exec-02b42227e495df344", "Transferred": [ { "RelativePath": "/test.jpg", "SrcMetadata": { "Type": "Regular", "ContentSize": 9244, "Mtime": "2023-09-03T11:29:16.000000000Z" }, "Overwrite": "False", "TransferTimestamp": "2023-09-03T11:57:25.358947114Z", "TransferType": "CONTENT_AND_METADATA", "TransferStatus": "SUCCESS" } ] }
標準の転送レポートは、下記の内容等が出力されます。
- 転送されたデータのパス
RelativePath
キーが該当します
- データ型、データサイズ (オブジェクトとファイルのみ) などが含まれるメタデータ
SrcMetadata
キーが該当します
- 転送された時刻
TransferTimestamp
キーが該当します
- スキップ、転送、検証、削除されたファイルの合計数
Result
の下記のキーが該当します- FilesTransferred:転送されたファイル数
- FilesDeleted:削除されたファイル数
- FilesVerified:(DataSyncが転送中に整合性を)検証したファイル数
- FilesSkipped:スキップされたファイル数
- コピー先に上書きされた場合
Overwrite
キーが該当します
- 転送が成功したかどうか
TransferStatus
キー配下が該当します
スキップ(Skipped)
標準のスキップのレポートファイルであるexec-ID.files-skipped-v1-ID.json
の中身は、下記の内容でした。
標準のスキップのレポートサンプル (クリックすると展開します)
{ "TaskExecutionId": "exec-02b42227e495df344", "Skipped": [ { "RelativePath": "/", "SkippedTimestamp": "2023-09-03T11:57:25.810888496Z", "SrcMetadata": { "Type": "Directory", "Mtime": "1970-01-01T00:00:00.000000000Z" }, "DstMetadata": { "Type": "Directory", "Mtime": "1970-01-01T00:00:00.000000000Z" }, "SkippedReason": "Both the source and destination match and TransferMode=CHANGED" } ] }
標準のスキップのレポートは、下記の内容等が出力されます。
- スキップされたデータのパス
RelativePath
キーが該当します
- スキップされた時刻
SkippedTimestamp
キーが該当します
- スキップされた理由
SkippedReason
キーが該当します
検証(Verified)
標準の検証レポートファイルであるexec-ID.files-verified-v1-ID.json
の中身は、下記の内容でした。
標準の検証のレポートサンプル (クリックすると展開します)
{ "TaskExecutionId": "exec-02b42227e495df344", "Verified": [ { "RelativePath": "/", "SrcMetadata": { "Type": "Directory", "Mtime": "1970-01-01T00:00:00.000000000Z" }, "DstMetadata": { "Type": "Directory", "Mtime": "1970-01-01T00:00:00.000000000Z" }, "VerifyTimestamp": "2023-09-03T11:57:26.338246757Z", "VerifyStatus": "SUCCESS" } ] }
標準の検証レポートは、下記の内容等が出力されます。
- 検証データのパス
RelativePath
キーが該当します
- 検証された時刻
VerifyTimestamp
キーが該当します
- 検証が成功したかどうか
VerifyStatus
キーが該当します
削除(Deleted)
標準の削除レポートファイルであるexec-ID.files-deleted-v1-ID.json
の中身は、下記の内容でした。
標準の削除レポートサンプル (クリックすると展開します)
{ "TaskExecutionId": "exec-02b42227e495df344", "Deleted": [ { "RelativePath": "/testのコピー.jpg", "DstMetadata": { "Type": "Regular", "ContentSize": 9244, "Mtime": "2023-09-03T11:53:35.000000000Z" }, "DeleteTimestamp": "2023-09-03T11:57:24.572738940Z", "DeleteStatus": "SUCCESS" } ] }
標準の削除レポートは、下記の内容等が出力されます。
- 削除されたデータのパス
RelativePath
キーが該当します
- データ型、データサイズなどの削除されたメタデータ
DstMetadata
キーが該当します
- 削除された時刻
DeleteTimestamp
キーが該当します
- 正常に削除されたかどうか
DeleteStatus
キーが該当します
レポートレベル
標準レポートのみ、レポートレベルを設定できます。概要レポートでは、選択できません。
レポートレベルには、以下の3つの種類があります。
- 成功とエラー
- DataSyncが正常に「転送、削除、検証、スキップ」されたものと、失敗したものが出力されます
- エラーのみ
- DataSyncが失敗したものだけが出力されます
- カスタム
- 「転送、削除、検証、スキップ」の各レポートに関して、成功とエラーもしくはエラーのみを出力させるか、選択できます。
実際の環境で利用される場合、少なくともエラーのみ
はレポートを出力しておくと、トラブルシューティングなどで役立ちます。
監査目的の場合、監査内容に応じて、成功とエラー
やカスタム
にするとよいでしょう。
CloudWatch Logsのログ設定と比較
CloudWatch Logsのログ設定とタスクレポートについて、それぞれのメリット、デメリットと、利用用途を考えてみます。
CloudWatch Logsのログ設定に関しては、下記のブログをご参考ください。
ログ設定と比較してタスクレポートのメリットは、以下が挙げられます。
- 監査として利用できる
- 概要レポートの転送された合計バイト数やスキップ、転送、検証、削除されたファイルの合計数などタスク全体が把握できます
- CloudWatch Logsは、各ファイルの結果は確認できますが、全体のファイル転送の成功数などは、確認できません。
- 概要レポートの転送された合計バイト数やスキップ、転送、検証、削除されたファイルの合計数などタスク全体が把握できます
- データ分析と可視化ができる
- AWS Glue、Amazon Athena、およびAmazon QuickSightなどのAWSサービスを使用して、これらのレポートのデータを自動的に処理、分析、可視化することができます。
- S3に保存されるため、保存料金が安い
逆にデメリットは下記です。
- エラー時、リアルタイムでのアラート通知は適さない
- CloudWatch Logsの場合、EventBridgeで検知、アラート通知が可能
- 分析時、Athenaが必要
- CloudWatch Logsの方が、手間をかけずに検索できます。
つまり、CloudWatch Logsのログ設定は、監視とアラートで短期保管、タスクレポートは、監査と分析として長期保管で利用するのがよいと思います。
最後に
AWS DataSyncタスクレポートは、データ転送の監査や分析の際に有効な機能です。
特に、大量のデータを頻繁にAWSに移行する場合や、データ転送の状況を詳細に把握したい場合に最適です。
ぜひ有効活用してみてください。